Esta primera práctica se realizará sobre los datos obtenidos de la página http://insideairbnb.com/get-the-data.html
Antes de realizar un análisis, se debe verificar si se tienen las librerías instaladas, si no se tiene alguna librerìa, se debe proceder a instalarlar.
import os, sys
import numpy as np
import pandas as pd
import pandas_profiling ####Verificar que esté instalada. Si no está instalada, se puede utilziar el comando conda install -c conda-forge pandas-profiling --y
%cd C:\Users\USUARIO\Documents\Monitoria_cda_2019_2\Clases_Python\Clase1_Python_ams
#data= pd.read_csv('listings.csv', sep=',', error_bad_lines=False)
data=pd.read_csv('listings.csv')
##Para seleccionar una primera vista de la tabla
data.head()
Como se puede observar en la vista anterior, la primera columna no tiene nombre, esto es por que el data frame de pandas asigna un índice, el cual nos puede ayudar a realizar algunas consultas, por ejemplo, suponga que se va seleccionar la primera fila, es decir la fila asociada al índice 0. para tal fin, se utiliza df.loc[a:b, "column name"], donde a y b corresponden al rango del índice de las filas y column name el nombre de la variable a seleccionar, si se desea seleccionar todas las variables, se agrega el comando :
data.loc[0:0, : ]
Ahora, ¿qué pasaría si no consideraramos 0:0, y por el contrario, tomamos sólo 0.
data.loc[0, : ]
Suponga ahora, que se va seleccionar las filas asociadas a las filas 0,1 y 2.
data.loc[0:2, : ]
Ahora, se va a seleccionar únicamente la variable "name" de las tres primeras filas, es decir, de los índices 0, 1 y 2.
data.loc[0:2, 'name']
A continuación, se va seleccionar las variables "name" y "summary" y las tres primeras filas, es decir, los índices 0, 1 y 2.
data.loc[0:2, ['name', 'summary']]
Finalmente, se va seleccionar únicamente la variable "name", y se considerarán todas las filas.
data.loc[:, 'name']
A continuación, se realiza un primer análisis sobre el tipo de variables, para tal fin, se utiliza la función data.dtypes
data.dtypes
Hay algunas variables para las cuales toca tener mucho cuidado, dado que el tipo no es corresto.
variables[0:50]
variables[51:100]
A continuación, se va seleccionar un conjunto de variables que van a ser de interés para un análisis preliminar.
data_analisis=data.loc[:, ['id','room_type', 'bathrooms', 'bedrooms', 'bed_type', 'price', 'weekly_price',
'monthly_price', 'security_deposit', 'city', 'state', 'country','first_review','last_review', 'review_scores_rating', 'number_of_reviews','has_availability', 'availability_30', 'availability_60',
'availability_90', 'availability_365']]
data_analisis.head()
data_analisis.dtypes
Se va corregir los signos pesos, para tal fin, se utilizará un conjunto de funciones
def eliminar_pesos(x):
x['monthly_price']=str(x['monthly_price']).replace('$','')
return x['monthly_price']
def eliminar_pesos_2(x):
x['weekly_price']=str(x['weekly_price']).replace('$','')
return x['weekly_price']
def eliminar_pesos_3(x):
x['price']=str(x['price']).replace('$','')
return x['price']
data_analisis['monthly_price']=data_analisis.apply(eliminar_pesos,axis=1)
data_analisis['weekly_price']=data_analisis.apply(eliminar_pesos_2,axis=1)
data_analisis['price']=data_analisis.apply(eliminar_pesos_3,axis=1)
data_analisis.head(100)
Para las variables "price", "weekly_price" y "monthly_price" se va a eliminar el caracter "," , para finalmente corregirlo.
def eliminar_coma(x):
x['monthly_price']=str(x['monthly_price']).replace(',','')
return x['monthly_price']
def eliminar_coma_2(x):
x['weekly_price']=str(x['weekly_price']).replace(',','')
return x['weekly_price']
def eliminar_coma_3(x):
x['price']=str(x['price']).replace(',','')
return x['price']
data_analisis['monthly_price']=data_analisis.apply(eliminar_coma,axis=1)
data_analisis['weekly_price']=data_analisis.apply(eliminar_coma,axis=1)
data_analisis['price']=data_analisis.apply(eliminar_coma,axis=1)
data_analisis.head()
A pesar de eliminar el caracter ",", el tipo de variable de las variables "price", "weekly_price" y "monthly_price" siguen siendo carácteres.
data_analisis.dtypes
A continuación, se corrige el tipo de datos de las variables "price", "weekly_price" y "monthly_price", para tal fin se utiliza la función astype(tipo_variable) de pandas.
data_analisis["price"]=data_analisis["price"].astype(float)
data_analisis["weekly_price"]=data_analisis["price"].astype(float)
data_analisis["monthly_price"]=data_analisis["price"].astype(float)
data_analisis.head()
Finalmente, se obtiene el número de variables y de filas del dataframe
data_analisis.shape
Para realizar un primer análisis exploratorio sobre la tabla, se utiliza la función pandas_profiling, el cual permite evidenciar el tipo de variable
pandas_profiling.ProfileReport(data_analisis)
Supongamos, ahora, que vamos a realizar un análisis sobre "bed_type== Real Bed"., entonces:
consulta_1=data_analisis[data_analisis.bed_type=="Real Bed"]
consulta_1.head()
Supongamos, ahora, que vamos a realizar un análisis sobre "bed_type== Real Bed" y number_of_reviews >23, entonces:
consulta_2=data_analisis[(data_analisis.bed_type=="Real Bed") & (data_analisis.number_of_reviews >23)]
consulta_2.head()
A continuación, se ejecuta pandas profiling sobre el dataframe denominado consulta_2
pandas_profiling.ProfileReport(consulta_2)
Las validaciones con duplicados se pueden realizar con el siguiente código:
consulta_2.duplicated().sum()
##Para eliminar duplicados (en caso que existan)
consulta_2=consulta_2.drop_duplicates()